package spring.cloud.tasks.common;

import lombok.Getter;

/**
 * <pre>
 *     最原始的设计的可能类型 add by huihui 请不要删除该注释
 *     SIMPLE_SLICING("SIMPLE_SLICING"),//简单分片
 *     TIMING_BASED_BATCH_PROCESSING("TIMING_BASED_BATCH_PROCESSING"),//基于时间定时执行的批量处理
 *     TIMING_BASED_AND_REACHED_DATA_SIZE_THRESHOLD_BATCH_PROCESSING("TIMING_BASED_AND_REACHED_DATA_SIZE_THRESHOLD_BATCH_PROCESSING"),//基于时间定时+到达数据量阀值时进行的批量处理
 *     RESOURCE_IDLE_BATCH_PROCESSING("RESOURCE_IDLE_BATCH_PROCESSING"),//资源空闲时自动进行的批量处理
 * </pre>
 */
//@Setter
@Getter
public enum TaskType {

    SIMPLE_SLICING("SIMPLE_SLICING"),//简单分片
    TIMING_BASED_BATCH_PROCESSING("TIMING_BASED_BATCH_PROCESSING"),//基于时间定时执行的批量处理
    USER_TIMING_BASED_BATCH_PROCESSING("USER_TIMING_BASED_BATCH_PROCESSING"),//用户提交的基于时间定时执行的批量处理(不是说用户提交就马上执行，也需要考虑执行的时间间隔和当前的资源使用率)
    UNKNOWN_TASK("UNKNOWN_TASK");//
    private final String taskType;

    TaskType(String taskType) {
        this.taskType = taskType;
    }

    public static final TaskType getTaskType(String taskType) {
        try {
            if (SIMPLE_SLICING.taskType.equals(taskType)) {
                return SIMPLE_SLICING;
            }
            if (TIMING_BASED_BATCH_PROCESSING.taskType.equals(taskType)) {
                return TIMING_BASED_BATCH_PROCESSING;
            }
            if (USER_TIMING_BASED_BATCH_PROCESSING.taskType.equals(taskType)) {
                return USER_TIMING_BASED_BATCH_PROCESSING;
            }
            return UNKNOWN_TASK;
        } catch (Exception e) {
            return UNKNOWN_TASK;
        }
    }

    /**
     * stage/type 一般两个字母表示就行。这样便于节约内存和ZK传输量。尽可能速度最快。
     */
    public static class SimpleSlicingTask {
        public static final String stage_one = "1";
        //类型区分为有状态和无状态
        public static final String stage_type_state_full = "SF";
        public static final String stage_type_state_less = "SL";
    }

}
